package models

import (
	"encoding/json"
	"github.com/astaxie/beego/orm"
	"home/service"
)

// 定义 type
type HomeMenu struct {
	Id         int
	MenuNumber string
	Name       string
	Url        string
}

// 获取菜单列表
func GetMenu() ([]HomeMenu, error) {
	var buffer []HomeMenu
	var redisKey string

	// 初始化redis
	redis := &service.Redis_tool{}
	// 指定数据库
	redis.Init(14)

	// 设定数据库key
	redisKey = "home_web_menu"
	if redis.Bool(redisKey) {
		// 如果菜单已经存储到redis里，则进行读取并返回
		result, err := redis.Lrange(redisKey, 0, 1)
		for _, v := range result {
			json.Unmarshal([]byte(v.([]uint8)), &buffer)
		}
		return buffer, err
	}
	// 如果菜单为存储到redis里则进行读取一次并写入缓存
	o := orm.NewOrm()
	_, err := o.Raw("SELECT * FROM `home_menu`").QueryRows(&buffer)
	if b, err := json.Marshal(buffer); err == nil {
		redis.Lpush(redisKey, string(b))
	}
	// 设定30天有效期
	redis.Expire(redisKey, 86400*30)
	redis.Close()
	return buffer, err

}
